home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / win_os2.swg / 0013_Booting under Windows.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-26  |  2KB  |  83 lines

  1. {
  2. Rebooting in itself is rather easy to do...call the right interrupt with
  3. the right values and you go it--most of the time.  I'd noticed that any
  4. reboot I tried to do from my program under windows would fail.  I'm not a
  5. windows programmer and seldom use it, but I do have one program that needs
  6. to be able to call this routine under certain conditions.  A clean reboot
  7. is favored to a lock up or data corruption.  I searched for pascal source
  8. to work under win, but found none.  I finally ran into a short .com file
  9. which did in fact work.  I ran the code through a .com to pas inline
  10. conversion utility and ended up with pages of ugly code.  I finally got
  11. around to converting it into inline assembly code which shortened things up
  12. substantially (10 pages or so-the inline tranlsation was bad, loops were
  13. iterative/non existant).  I then killed the code not necessary for pascal,
  14. and this is what I ended up with:
  15. }
  16.  
  17. UNIT BOOTSYS;
  18. (* Unit for unconditional reboot (TESTED UNDER DOS 5/6 & WIN 3.0/3.1) *)
  19. (* (C) Copyright 1993 Frank Young, all rights reserved *)
  20. INTERFACE
  21.  
  22. PROCEDURE REBOOT;
  23.  
  24. IMPLEMENTATION
  25. Procedure Reboot; Assembler;
  26. ASM
  27.   MOV AX,CS
  28.   MOV DS,AX
  29.   MOV ES,AX
  30.   MOV SS,AX
  31.   MOV SP,030Dh
  32.   MOV BYTE PTR [00FFh],00
  33. @LOOP1:
  34.   CALL @LOOP3
  35.   MOV AH,4Ch
  36.   INT 21h
  37.   JMP @LOOP1
  38.   MOV CX,250
  39. @LOOP2:
  40.   ADD [BX+SI],AL
  41.   LOOP @LOOP2
  42.   ADD DL,BH
  43. @LOOP3:
  44.   MOV AX,0040h
  45.   MOV DS,AX
  46.   MOV BX,0072h
  47.   MOV WORD PTR [BX],1234h
  48. @LOOP4:
  49.   IN AL,64h
  50.   TEST AL,02h
  51.   JNZ @LOOP4
  52.   MOV AL,0D1h
  53.   OUT 64,AL
  54.   XOR AL,AL
  55.   OUT 64,AL
  56.   STI
  57.   MOV CX,0003h
  58. @LOOP5:
  59.   MOV AX,[$006C]
  60. @LOOP6:
  61.   CMP AX,[$006C]
  62.   JZ @LOOP6
  63. LOOP @LOOP5
  64.   CLI
  65.   IN AL,60h
  66.   XOR AX,AX
  67.   MOV DS,AX
  68.   MOV ES,AX
  69.   MOV SS,AX
  70.   MOV SP,AX
  71.   MOV AX,0062h
  72.   CLI
  73.   PUSH AX
  74.   MOV AX,$F000
  75.   PUSH AX
  76.   MOV AX,$FFF0
  77.   PUSH AX
  78.   XOR AX,AX
  79.   IRET
  80. end;
  81.  
  82. end.
  83.